package com.liu.io.file.pdf;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 页眉/页脚
 * @author liubo
 */
public class HeaderFooter extends PdfPageEventHelper {

    /**
     * 总页数
     */
    PdfTemplate totalPage;

    Font hfFont = new Font(Font.COURIER, 6, Font.BOLD);

    /**
     * 打开文档时，创建一个总页数的模版
     *
     * @param writer
     * @param document
     */
    @Override
    public void onOpenDocument(PdfWriter writer, Document document) {
        PdfContentByte cb = writer.getDirectContent();
        totalPage = cb.createTemplate(30, 16);
    }

    /**
     * 一页加载完成触发，写入页眉和页脚
     *
     * @param writer
     * @param document
     */
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        PdfPTable table = new PdfPTable(3);
        try {
            table.setTotalWidth(PageSize.A4.getWidth() - 100);
            table.setWidths(new int[]{24, 24, 3});
            table.setLockedWidth(true);
            table.getDefaultCell().setFixedHeight(-10);
            table.getDefaultCell().setBorder(Rectangle.BOTTOM);

            SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            String date = df.format(new Date());
            // 可以直接使用addCell(str)，不过不能指定字体，中文无法显示
            table.addCell(new Paragraph(date, hfFont));
            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(new Paragraph(writer.getPageNumber() + " / ", hfFont));
            // 总页数
            PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
            cell.setBorder(Rectangle.BOTTOM);
            table.addCell(cell);
            // 将页眉写到document中，位置可以指定，指定到下面就是页脚
            table.writeSelectedRows(0, -1, 50, PageSize.A4.getHeight() - 15, writer.getDirectContent());
        }
        catch (Exception de) {
            throw new ExceptionConverter(de);
        }
    }

    /**
     * 全部完成后，将总页数的pdf模版写到指定位置
     *
     * @param writer
     * @param document
     */
    @Override
    public void onCloseDocument(PdfWriter writer, Document document) {
        String text = String.valueOf(writer.getPageNumber() > 1 ? writer.getPageNumber() - 1 : 1);
        ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text, hfFont), 0, 8, 0);
    }

}